/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Documento;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.FontFactory;
import com.itextpdf.text.Image;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import javax.swing.JTable;

/**
 * Esta clase en java permite crear un documento en PDF
 * al cual se le agrega contenido para posteriormente guardarlo
 * en un archivo PDF.
 *
 *
 * @author sebaxtian
 * Archivo: DocumentoPDF.java
 * @version 1.0
 * Fecha: mié jun  9 00:25:19 COT 2010
 */


public class DocumentoPDF {

    //Atributos de clase.
    public static int INTERLINEADO = 20;
    public static int SIZELETRA = 12;
    public static String TIPOLETRA = "arial";
    public static BaseColor COLORLETRA = BaseColor.BLACK;
    public static int FORMATOLETRA = Font.NORMAL;
    private Document documento;
    private FileOutputStream archivoPDF;

    public DocumentoPDF(File archivo) throws FileNotFoundException, DocumentException {
        documento = new Document();
        archivoPDF = new FileOutputStream(archivo);
        PdfWriter.getInstance(documento, archivoPDF).setInitialLeading(INTERLINEADO);
        documento.open();
    }

    public void agregarParrafoCentrado(String texto) throws DocumentException{
        Paragraph parrafo = new Paragraph(texto,FontFactory.getFont(TIPOLETRA,SIZELETRA,FORMATOLETRA,COLORLETRA));
        parrafo.setAlignment(Chunk.ALIGN_CENTER);
        documento.add(parrafo);
    }

    public void agregarParrafoJustificado(String texto) throws DocumentException {
        Paragraph parrafo = new Paragraph(texto,FontFactory.getFont(TIPOLETRA,SIZELETRA,FORMATOLETRA,COLORLETRA));
        parrafo.setAlignment(Chunk.ALIGN_JUSTIFIED);
        documento.add(parrafo);
    }

    public void agregarImagenCentrada(Image imagen) throws DocumentException {
        imagen.scaleToFit(100, 100);
        imagen.setAlignment(Chunk.ALIGN_CENTER);
        documento.add(imagen);
    }

    public void agregarTabla(JTable tabla,String tipoLetra, int sizeLetra, int formato, BaseColor color) throws DocumentException {
        PdfPTable tablaPDF = new PdfPTable(tabla.getColumnCount());
        insertarEncabezado(tablaPDF, tabla, tipoLetra, sizeLetra, formato, color);
        for(int i = 0; i < tabla.getRowCount(); i++){
            for(int j = 0; j < tabla.getColumnCount(); j++){
                tablaPDF.addCell(obtenerParrafo(tabla.getValueAt(i, j).toString(), tipoLetra, sizeLetra, formato, color));
            }
        }
        documento.add(tablaPDF);
    }

    private void insertarEncabezado(PdfPTable tablaPDF, JTable tabla, String tipoLetra, int sizeLetra, int formato, BaseColor color) {
        tipoLetra = "arial";
        sizeLetra = 6;
        formato = Font.BOLD;
        color = BaseColor.BLACK;
        for(int i = 0; i < tabla.getColumnCount(); i++){
            String titulo = tabla.getTableHeader().getColumnModel().getColumn(i).getIdentifier().toString();
            tablaPDF.addCell(obtenerParrafo(titulo, tipoLetra, sizeLetra, formato, color));
        }
    }

    private Paragraph obtenerParrafo(String texto,String tipoLetra, int sizeLetra, int formato, BaseColor color) {
        Paragraph parrafo = new Paragraph(texto,FontFactory.getFont(tipoLetra,sizeLetra,formato,color));
        return parrafo;
    }

    public void cerrarDocumento() {
        documento.close();
    }
}
